package com.ys.service.sys;

import java.util.List;

import org.springframework.ui.Model;

import com.bo.dto.NameValueDto;
import com.bo.dto.NameValueSelectDto;
import com.ys.dto.DtreeDto;
import com.ys.vo.LayuiTableVoJA;
import com.ys.vo.R;

import lombok.AllArgsConstructor;
import lombok.Data;

public interface SysMenuService {
	LayuiTableVoJA list();

	DtreeDto dtree(Integer maxLevel);
	
	R addOneMenu(String name);
	
	R addTwoMenu(Long pid, String name);
	
	R addThreeMenu(Long pid, String name, String nameTable, Integer typeTemplet,
			Integer isCheckbox, Integer isShowNo, Integer isShowCount);
	
	R resort(String menuArr);
	
	String toResort(Model model, Long pid);
	@Data
	@AllArgsConstructor
	public class ToResortDto{
		private Long pid; // 上级ID，不同类型对应不同ID
		private List<RowDto> rows; // 数据行
		
		@Data
		@AllArgsConstructor
		public static class RowDto {
			private Long id; // 字段ID
			private String name; // 字段名称
		}
	}
	
	String toAddTwoMenu(Model model, Long pid);
	@Data
	@AllArgsConstructor
	public class ToAddTwoMenuDto{
		private Long pid; // 所属菜单ID
		private String pName; // 所属菜单名称
	}
	
	String toAddThreeMenu(Model model, Long pid);
	@Data
	@AllArgsConstructor
	public class ToAddThreeMenuDto{
		private Long pid; // 所属菜单ID
		private String pName; // 所属菜单名称
		private List<NameValueSelectDto> typeTempletArr; // 类型数组
		private List<NameValueDto> tableNameArr; // 表数组
	}
	
	R threeMenuInitCol(
			Long menuId,
			String colArr) throws Exception;

	R deleteTrue(Long id);
	
	R editSysMenu(Long id, String name, String nameShiroAuth);
	
	R editSysMenuFormBase(Long id, String pathPageAdd, String pathPageEdit, String pathCommitAdd, String pathCommitEdit);
	
	String toEditSysMenu(Model model, Long id, Integer tabIndex);
	@Data
	@AllArgsConstructor
	public class ToEditSysMenuDto{
		private Long id; // 菜单ID
		private String name; // 菜单名称
		private String nameShiroAuth; // 授权名称
		private Integer tabIndex; // 页面序号，见具体HTML页面
		private String pathCommitAdd; // 新增页提交地址
		private String pathCommitEdit; // 修改页提交地址
	}
}
